/**
 *  	url
 *      valueField
        textField
        type: edit form的编辑框 condition为查询框下拉样式
        onBeforeLoad: function(target, param) {},
        onLoadSuccess: function (target) {}
 */
(function ($) {
	//1.定义jquery的扩展方法bootstrapSelect
	$.fn.bootstrapSelect = function (options, param) {
		if (typeof options == 'string') {
			return $.fn.bootstrapSelect.methods[options](this, param);
		}
		//2.将调用时候传过来的参数和default参数合并
		options = $.extend({}, $.fn.bootstrapSelect.defaults, options || {});
		//3.添加默认值
		var target = $(this);
		
		target.attr('valuefield', options.valueField);
		target.attr('textfield', options.textField);
		target.attr('type', options.type);
		target.empty();
		var option = $('<option></option>');
		option.attr('value', '');
		option.text(options.placeholder);
		target.append(option);
		//4.判断用户传过来的参数列表里面是否包含数据data数据集，如果包含，不用发ajax从后台取，否则否送ajax从后台取数据
		if (options.data) {
			
			options.onBeforeLoad.call(target, options.param);
			
			init(target, options.data);
			
			//初始化后 实例化selectpicker组件
			if (!target.hasClass("selectpicker")) target.addClass("selectpicker");
			target.selectpicker();
			
			//如果有值就设置默认值,没有就默认下拉选项第一个
			if(options.value != null && options.value != ''){
				target.selectpicker('val', options.value);
			}else{
				if(null != options.data && options.data.length > 0){
					target.selectpicker('val', options.data[0][options.valueField]);
				}
			}
		} else {
			//var param = {};
			options.onBeforeLoad.call(target, options.param);
			if (!options.url) return;
			$.getJSON(options.url, options.param, function (data) {
				init(target, data);
				//初始化后 实例化selectpicker组件
				if (!target.hasClass("selectpicker")) target.addClass("selectpicker");
				target.selectpicker();
				
				//如果有值就设置默认值,没有就默认下拉选项第一个
				if(options.value != null && options.value != ''){
					target.selectpicker('val', options.value);
				}else{
					if(options.autoChoose && null != data && data.length > 0){
						target.selectpicker('val', data[0][options.valueField]);
					}
				}
			});
		}
		function init(target, data) {
			target.data("data", data);
			$.each(data, function (i, item) {
				var option = $('<option></option>');
				option.attr('value', item[options.valueField]);
				option.text(item[options.textField]);
				target.append(option);
			});
			options.onLoadSuccess.call(options.onLoadSuccess, target, data);
		}
		target.unbind("change");
		target.on("change", function (e) {
			var selectedIndex = e.currentTarget.selectedIndex;
			if(selectedIndex != 0 && options.onSelect){
				//alert(target.data("data")[selectedIndex - 1]);
				var data = target.data("data")[selectedIndex-1];
				options.onSelect.call(options.onSelect, data);
			}
		});
	}

	//5.如果传过来的是字符串，代表调用方法。
	$.fn.bootstrapSelect.methods = {
			getValue: function (jq) {
				return jq.val();
			},
			getText: function (jq) {
				return jq.text();
			},
			setValue: function (jq, param) {
				jq.val(param);
			},
			load: function (jq, url) {
				$.getJSON(url, function (data) {
					jq.empty();
					var option = $('<option></option>');
					option.attr('value', '');
					option.text('请选择');
					jq.append(option);
					$.each(data, function (i, item) {
						var option = $('<option></option>');
						option.attr('value', item[jq.attr('valuefield')]);
						option.text(item[jq.attr('textfield')]);
						jq.append(option);
					});
				});
			}
	};

	//6.默认参数列表
	$.fn.bootstrapSelect.defaults = {
			url: null,
			param: null,
			data: null,
			value:null,
			type: 'edit',//默认为编辑下拉框
			valueField: 'value',
			textField: 'text',
			placeholder: '请选择',
			autoChoose: true,
			onBeforeLoad: function(target, param) {
			},
			onLoadSuccess: function (target, data) {
			},
			onSelect : function (node){ },
	};
})(jQuery);